# Chapter 7. bash: The Bourne-Again Shell

#### Contents:

Overview of Features
Invoking the Shell
Syntax
Variables
Arithmetic Expressions
Command History
Built-in Commands
Job Control

This chapter presents the following topics:

- Overview of features

- Invoking the shell

- Syntax

- Variables

- Arithmetic expressions

- Command history

- Built-in commands

- Job control

## 7.1. Overview of Features

bash is the GNU version of the standard Bourne shell -- the original Unix shell -- and incorporates many popular features from other shells such as csh, tcsh, and the Korn shell (ksh). Both tcsh, which is described in the following chapter, and ksh, which offers many of the features in this chapter, also are available on most distributions of Linux. But bash is the standard Linux shell, loaded by default when most user accounts are created.

If executed as part of the user's login, bash starts by executing any commands found in /etc/profile. Then it executes the commands found in ~/.bash_profile, ~/.bash_login, or ~/.profile (searching for each file only if the previous file is not found). Many distributions change shell defaults in /etc/profile for all users, even changing the behavior of common commands like ls.

In addition, every time it starts (as a subshell or a login shell), bash looks for a file named ~/.bashrc. Many system administration utilities create a small ~/.bashrc automatically, and many users create quite large startup files. Any commands that can be executed from the shell can be included. A small sample file may look like this; each feature can be found either in this chapter or in Chapter 3, "Linux Commands":

>     # Set bash variable to keep 50 commands in history.
>     HSTSIZE=50
>     #
>     # Set prompt to show current working directory and history number of command.
>     PS1='\w: Command \!$ '
>     #
>     # Set path to search for commands in my personal directories, then standard ones.
>     PATH=~/bin:~/scripts:$PATH
>     #
>     # Keep group and others from writing my newly created files.
>     umask 022
>     #
>     # Show color-coded file types.
>     alias ls='ls --color=yes'
>     #
>     # Make executable and .o files ugly yellow so I can find and delete them.
>     export LS_COLORS="ex=43:*.o=43"
>     #
>     # Quick and dirty test of a single-file program.
>     function gtst () {
>         g++ -o $1 $1.C && ./$1
>     }
>     #
>     # Remove .o files.
>     alias clean='find ~ -name \*.o -exec rm {} \;'

bash provides the following features:

- Input/output redirection

- Wildcard characters (metacharacters) for filename abbreviation

- Shell variables for customizing your environment

- Powerful programming capabilities

- Command-line editing (using vi- or Emacs-style editing commands)

- Access to previous commands (command history)

- Integer arithmetic

- Arithmetic expressions

- Command name abbreviation (aliasing)

- Job control

- Integrated programming features

- Control structures

- Directory stacking (using pushd and popd)

- Brace/tilde expansion

- Key bindings

Copyright © 2001 O'Reilly & Associates. All rights reserved.